#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# File: data_download.py
# Date: 2024/7/4
# Author: 抖音、快手、视频号：东哥策略交易，微信：dongtrader
# Description: 东哥量化，带你走上量化之路。

from get_stock_data import stock_updata_main, stock_updata_test

'''
这是下载股票、期货、虚拟币等数据程序的入口部分。

调用main函数时，可以修改了两个参数：update=False和update=True。
update=False表示对数据进行全部进行重新下载及计算，即从外部源获取最新的数据并覆盖已经存在的数据。
update=True表示在现有数据基础上进行增补更新，即从外部源获取最新的数据并覆盖已有的数据。

注意：
1、在运行下面程序前，请确保已经对各市场的数据以及因子计算进行了相应配置。否则可能造成数据计算错误。
2、对于新配置，第一次下载数据量，请使用update=False进行数据更新。
'''

# 执行股票数据更新
if __name__ == '__main__':
    print("欢迎使用东哥量化工具箱\n关注各平台@东哥量化\n东哥量化，带你走上量化之路。\n")

    print('''
    调用股票数据更新主函数，程序运行将对股票数据进行下载以及因子计算操作。
    mode == 'all': 覆盖式下载股票数据及股票因子计算
    mode == 'update': 更新式下载股票数据及股票因子计算
    mode == 'factor': 使用原有股票数据更新股票因子计算，适用于在股票数据已经为最新的情况下，调试/重置因子
    
    股票数据更新测试函数，采用覆盖式下载股票数据及股票因子计算。
    stock_num=0: 可选，输入股票数量，程序随机选择相应数量股票进行程序测试。
    ''')
    while True:
        num_input = int(input("\n请选择:\n1. 股票数据更新\n2. 股票数据测试\n3. 退出\n"))
        if num_input == 1:
            while True:
                try:
                    mode_input = int(input("\n请选择(数字):"
                                           "\n1. 覆盖式下载股票数据及股票因子计算"
                                           "\n2. 更新式下载股票数据及股票因子计算"
                                           "\n3. 使用原有股票数据更新股票因子计算，适用于在股票数据已经为最新的情况下，调试/重置因子\n"))
                except:
                    print("输入错误，请重新输入")
                    continue
                if mode_input == 1:
                    mode = 'all'
                elif mode_input == 2:
                    mode = 'update'
                elif mode_input == 3:
                    mode = 'factor'
                else:
                    print("输入错误，请重新输入")
                    continue
                stock_updata_main(mode=mode)
                break
        elif num_input == 2:
            while True:
                try:
                    stock_input = int(input("\n请选择(数字):"
                                            "\n输入0. 即使用原有股票数据更新股票因子计算，适用于在股票数据已经为最新的情况下，调试/重置因子："
                                            "\n输入大于0的其它数字. 即为需要测试的股票数量:\n"))

                except:
                    print("输入错误，请重新输入")
                    continue
                if stock_input == 0:
                    stock_updata_main(mode='factor')
                elif stock_input > 0:
                    stock_updata_test(stock_num=stock_input)
                else:
                    print("输入错误，请重新输入")

                break

            break
        elif num_input == 3:
            exit()
        else:
            print("输入错误，请重新输入")
